package br.unifor.ads.desphouse.business;

import java.sql.SQLException;
import java.util.List;

import br.unifor.ads.desphouse.dao.UsuarioDAO;
import br.unifor.ads.desphouse.entity.Usuario;
import br.unifor.ads.desphouse.exception.BusinessException;
import br.unifor.ads.desphouse.to.UsuarioTO;
//import br.unifor.ads.desphouse.util.VariaveisAmbiente;

/**
 * Classe de negocio para o usuario
 *  
 * @author Alex Girao
 */
public class UsuarioBusiness {
	
	private UsuarioDAO usuarioDAO;
	
	public UsuarioBusiness() {
		usuarioDAO = new UsuarioDAO();
	}
	
	public List<Usuario> buscarTodos() throws BusinessException{
		try {
			return usuarioDAO.buscarTodos();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	public Usuario buscarPorCodigo(Long codigo) throws BusinessException{
		try {
			return usuarioDAO.buscarPorCodigo(codigo);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	public void excluirPorCodigo(Long codigo) throws BusinessException{
		try {
			usuarioDAO.excluirPorCodigo(codigo);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	public Usuario autenticar(Usuario usuario) throws BusinessException{
		try {
			usuario.setChave(usuario.getChave().toUpperCase());
			return usuarioDAO.buscarPorChaveSenha
					(usuario.getChave(), usuario.getSenha());
			
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	//TODO criar teste
	public List<Usuario> buscarPorFiltro(UsuarioTO to) throws BusinessException{
		try {
			to.setChave(to.getChave().toUpperCase());
			return usuarioDAO.buscarPorFiltro(to);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	public void excluirPorChave(String chave) throws BusinessException{
		try {
			usuarioDAO.excluirPorChave(chave);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	public Usuario salvar(Usuario usuario) throws BusinessException{
		try {
			usuario.setChave(usuario.getChave().toUpperCase());
			if(usuario.getCodigo()==null){
				usuario = usuarioDAO.salvar(usuario);
			}else{
				usuarioDAO.atualizar(usuario);
			}
			return usuario;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	
	//TODO criar teste
	public boolean verificarChaveExiste(String chave) throws BusinessException{
		try {
			return usuarioDAO.buscarPorChave(chave)!=null;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		}
	}
	

}
